#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include "PilaCompartida.h"

int main ()
{
	static const std::string NOMBRE = "./src/prueba_PilaCompartida/prueba_PilaCompartida.cc";
	static const int HIJOS = 40;
	try {
		PilaCompartida<int> buffer(NOMBRE, HIJOS);
		PilaCompartida<int>::inicializarSemaforos(buffer);
		for ( int i=0;i<HIJOS;i++ ) {
			pid_t pid = fork();
			if ( pid == 0 ) {
				buffer.crear();
				buffer.desapilar();
				return 0;
			}
		}
		buffer.crear();
		for ( int i=0;i<HIJOS;i++ ) {
				buffer.apilar(i);
		}
		for ( int i=0;i<HIJOS;i++ ) {
			wait(NULL);
		}
	} catch (std::string & e) {
		std::cerr << e << std::endl;
		exit(EXIT_FAILURE);
	}
	return 0;
}
